/**
 * 给定二维黑白矩阵，矩阵的收益是白权值和减去黑权值和
 * 现在允许操作一次：选择一行，选择一列，将行中每格的权值依次加到对应的列的格子上
 * 问能得到的矩阵收益最大是多少
 * 考虑行，如果行、列的黑白顺序相同，则对权值收益的影响就是该行的白权值和减黑权值和
 * 如果行、列顺序不同，则影响就是黑权值和减白权值和。
 * 至于加到哪一列上，其实没有影响，因为两种列必然都找得到。
 * 因此枚举每一行求最大的黑白权值之差的绝对值即可。
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>

using Real = long double;
using llt = long long;
using pii = pair<int, int>;
using vi = vector<int>;

llt const MOD = 998244353LL;

int N;
vector<vi> A;

int proc(){
    int origin = 0;
    for(int i=0;i<N;++i)for(int j=0;j<N;++j){
        if(i + j & 1) origin -= A[i][j];
        else origin += A[i][j];
    }

    int anchor = 0;
    for(const auto & a : A){
        int tmp = 0;
        for(int i=0;i<N;++i){
            if(i & 1) tmp -= a[i];
            else tmp += a[i];
        }
        if(tmp < 0) tmp = -tmp;
        anchor = max(anchor, tmp);
    }

    return origin + anchor;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int nofakse = 1;
    // cin >> nofakse;
    while(nofakse--){
        cin >> N;
        A.assign(N, vi(N, 0));
        for(auto & a : A)for(auto & i : a)cin>>i;
        cout << proc() << endl;
    }
    return 0;
}